/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.uniminuto.park.controlador;

import co.uniminuto.park.clases.Estacionamiento;
import co.uniminuto.park.clases.Geolocalizacion;
import co.uniminuto.park.clases.Roles;
import co.uniminuto.park.clases.Usuario;
import co.uniminuto.park.dao.consultarRolDao;
import co.uniminuto.park.dao.consultarUsuarioDao;
import co.uniminuto.park.dao.consultarrEstacionamientoDao;
import co.uniminuto.park.dao.insertarEstacionamientoDao;
import co.uniminuto.park.dao.insertarUsuarioDao;
import co.uniminuto.park.dao.loginDao;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.bson.types.ObjectId;
import org.primefaces.context.RequestContext;
import org.primefaces.event.RowEditEvent;
import org.primefaces.model.map.DefaultMapModel;
import org.primefaces.model.map.LatLng;
import org.primefaces.model.map.MapModel;
import org.primefaces.model.map.Marker;

/**
 *
 * @author Esteban Rozo
 */
@ManagedBean
@ViewScoped
public class login {

    private Usuario user;
    FacesContext con = FacesContext.getCurrentInstance();
    private String log;
    HttpServletRequest req = (HttpServletRequest) con.getExternalContext().getRequest();
    HttpSession sesion = req.getSession(false);

    public String getLog() {
        return log;
    }

    public void setLog(String log) {
        this.log = log;
    }

    public Usuario getUser() {
        return user;
    }

    public void setUser(Usuario user) {
        this.user = user;
    }

    private EstacionamientosLista getElementoApplication() {
        FacesContext cont = FacesContext.getCurrentInstance();
        return cont.getApplication().evaluateExpressionGet(cont, "#{elementoApplication}", EstacionamientosLista.class);
    }

    public login() {
        log = "true";

        user = new Usuario();
//         HttpSession httpSession = (HttpSession) context.getExternalContext().getSession(true);
        //l  httpSession.setAttribute("user", user);

    }

    public void logout() {
        Usuario x = null;


        sesion.setAttribute("user", x);
        sesion.invalidate();

    }

    public String login(ActionEvent actionEvent) {
        String request = "";
        RequestContext context = RequestContext.getCurrentInstance();
        FacesMessage msg = null;
        boolean loggedIn = false;
        loginDao login = new loginDao();
        if (login.getLoginUs(user)) {
            loggedIn = true;
            user = login.getUs(user);
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Bienvenido", user.getCorreo());
            log = "false";
            FacesContext.getCurrentInstance().addMessage(null, msg);
            context.addCallbackParam("loggedIn", loggedIn);


            sesion.setAttribute("user", user);
            return request = "sucess";
            /*        
             try {
             contex.getExternalContext().redirect( "/faces/" );
             } catch (IOException ex) {
             Logger.getLogger(login.class.getName()).log(Level.SEVERE, null, ex);
             }*/

        } else {
            loggedIn = false;
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Error de Login", "Credenciales Invalidas");
            FacesContext.getCurrentInstance().addMessage(null, msg);
            context.addCallbackParam("loggedIn", loggedIn);
            user = null;
            return request = null;

        }

    }

    public String validarM() {
        String g = "";
        FacesMessage mes = new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro", "Se tiene que loguear, o no tiene permisos para acceder");
        Usuario uSe = (Usuario) sesion.getAttribute("user");
        if (uSe == null) {
            RequestContext.getCurrentInstance().showMessageInDialog(mes);
            return g = "";
        } else {
            if (uSe.getRol().getIdRol().equals("AD")) {
                return g = "case1";
            } else {
                RequestContext.getCurrentInstance().showMessageInDialog(mes);
                return g = "";
            }
        }
    }

    public String validarUac() {
        String g = "";
        FacesMessage mes = new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro", "Se tiene que loguear, o no tiene permisos para acceder");
        Usuario uSe = (Usuario) sesion.getAttribute("user");
        if (uSe == null) {
            RequestContext.getCurrentInstance().showMessageInDialog(mes);
            return g = "";
        } else {
            if (uSe.getRol().getIdRol().equals("AC")) {

                return g = "case2";
            } else {

                RequestContext.getCurrentInstance().showMessageInDialog(mes);
                return g = "";

            }

        }

    }
    
    public String validarM2() {
        String g = "";
        FacesMessage mes = new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro", "Se tiene que loguear, o no tiene permisos para acceder");
        Usuario uSe = (Usuario) sesion.getAttribute("user");
        if (uSe == null) {
            RequestContext.getCurrentInstance().showMessageInDialog(mes);
            return g = "";
        } else {
            if (uSe.getRol().getIdRol().equals("AD")) {
                return g = "case3";
            } else {
                RequestContext.getCurrentInstance().showMessageInDialog(mes);
                return g = "";
            }
        }
    }
    
     public String validarM3() {
        String g = "";
        FacesMessage mes = new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro", "Se tiene que loguear, o no tiene permisos para acceder");
        Usuario uSe = (Usuario) sesion.getAttribute("user");
        if (uSe == null) {
            RequestContext.getCurrentInstance().showMessageInDialog(mes);
            return g = "";
        } else {
            if (uSe.getRol().getIdRol().equals("AD")) {
                return g = "case4";
            } else {
                RequestContext.getCurrentInstance().showMessageInDialog(mes);
                return g = "";
            }
        }
    }
   
    public String validarM5() {
        String g = "";
        FacesMessage mes = new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro", "Se tiene que loguear, o no tiene permisos para acceder");
        Usuario uSe = (Usuario) sesion.getAttribute("user");
        if (uSe == null) {
            RequestContext.getCurrentInstance().showMessageInDialog(mes);
            return g = "";
        } else {
            if (uSe.getRol().getIdRol().equals("AD")) {
                return g = "case5";
            } else {
                RequestContext.getCurrentInstance().showMessageInDialog(mes);
                return g = "";
            }
        }
    }
    
    
     public String validarM6() {
        String g = "";
        FacesMessage mes = new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro", "Se tiene que loguear, o no tiene permisos para acceder");
        Usuario uSe = (Usuario) sesion.getAttribute("user");
        if (uSe == null) {
            RequestContext.getCurrentInstance().showMessageInDialog(mes);
            return g = "";
        } else {
            if (uSe.getRol().getIdRol().equals("AD")|| uSe.getRol().getIdRol().equals("AC")) {
                return g = "perfil";
            } else {
                RequestContext.getCurrentInstance().showMessageInDialog(mes);
                return g = "";
            }
        }
    }
    
}
